/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logica.jpaControllers;

import Entidades.Operario;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;
import Entidades.Localidad;
import Entidades.Provincia;
import Entidades.Pais;
import Entidades.Estadooperario;
import Entidades.Tipodocumento;
import Entidades.Pesajeentrada;
import java.util.ArrayList;
import java.util.Collection;
import Entidades.Contrato;
import Entidades.Pesajesalida;
import Entidades.Ciu;
import Entidades.Cargaempaque;
import Entidades.Recepcion;
import Entidades.Condicion;
import Entidades.Lagar;
import Entidades.Operariorol;
import logica.jpaControllers.exceptions.IllegalOrphanException;
import logica.jpaControllers.exceptions.NonexistentEntityException;

/**
 *
 * @author Anali
 */
public class OperarioJpaController {

    public OperarioJpaController() {
        emf = Persistence.createEntityManagerFactory("GestorPesajeJpaPU2");
    }
    private EntityManagerFactory emf = null;

    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    public void create(Operario operario) {
        if (operario.getPesajeentradaCollection() == null) {
            operario.setPesajeentradaCollection(new ArrayList<Pesajeentrada>());
        }
        if (operario.getContratoCollection() == null) {
            operario.setContratoCollection(new ArrayList<Contrato>());
        }
        if (operario.getPesajesalidaCollection() == null) {
            operario.setPesajesalidaCollection(new ArrayList<Pesajesalida>());
        }
        if (operario.getCiuCollection() == null) {
            operario.setCiuCollection(new ArrayList<Ciu>());
        }
        if (operario.getCargaempaqueCollection() == null) {
            operario.setCargaempaqueCollection(new ArrayList<Cargaempaque>());
        }
        if (operario.getRecepcionCollection() == null) {
            operario.setRecepcionCollection(new ArrayList<Recepcion>());
        }
        if (operario.getCondicionCollection() == null) {
            operario.setCondicionCollection(new ArrayList<Condicion>());
        }
        if (operario.getLagarCollection() == null) {
            operario.setLagarCollection(new ArrayList<Lagar>());
        }
        if (operario.getOperariorolCollection() == null) {
            operario.setOperariorolCollection(new ArrayList<Operariorol>());
        }
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Localidad localidad = operario.getLocalidad();
            if (localidad != null) {
                localidad = em.getReference(localidad.getClass(), localidad.getIdlocalidad());
                operario.setLocalidad(localidad);
            }
            Provincia provincia = operario.getProvincia();
            if (provincia != null) {
                provincia = em.getReference(provincia.getClass(), provincia.getIdprovincia());
                operario.setProvincia(provincia);
            }
            Pais pais = operario.getPais();
            if (pais != null) {
                pais = em.getReference(pais.getClass(), pais.getIdpais());
                operario.setPais(pais);
            }
            Estadooperario estadooperario = operario.getEstadooperario();
            if (estadooperario != null) {
                estadooperario = em.getReference(estadooperario.getClass(), estadooperario.getIdestadooperario());
                operario.setEstadooperario(estadooperario);
            }
            Tipodocumento tipodocumento = operario.getTipodocumento();
            if (tipodocumento != null) {
                tipodocumento = em.getReference(tipodocumento.getClass(), tipodocumento.getIdtipodocumento());
                operario.setTipodocumento(tipodocumento);
            }
            Collection<Pesajeentrada> attachedPesajeentradaCollection = new ArrayList<Pesajeentrada>();
            for (Pesajeentrada pesajeentradaCollectionPesajeentradaToAttach : operario.getPesajeentradaCollection()) {
                pesajeentradaCollectionPesajeentradaToAttach = em.getReference(pesajeentradaCollectionPesajeentradaToAttach.getClass(), pesajeentradaCollectionPesajeentradaToAttach.getIdpesajeentrada());
                attachedPesajeentradaCollection.add(pesajeentradaCollectionPesajeentradaToAttach);
            }
            operario.setPesajeentradaCollection(attachedPesajeentradaCollection);
            Collection<Contrato> attachedContratoCollection = new ArrayList<Contrato>();
            for (Contrato contratoCollectionContratoToAttach : operario.getContratoCollection()) {
                contratoCollectionContratoToAttach = em.getReference(contratoCollectionContratoToAttach.getClass(), contratoCollectionContratoToAttach.getNumeroContrato());
                attachedContratoCollection.add(contratoCollectionContratoToAttach);
            }
            operario.setContratoCollection(attachedContratoCollection);
            Collection<Pesajesalida> attachedPesajesalidaCollection = new ArrayList<Pesajesalida>();
            for (Pesajesalida pesajesalidaCollectionPesajesalidaToAttach : operario.getPesajesalidaCollection()) {
                pesajesalidaCollectionPesajesalidaToAttach = em.getReference(pesajesalidaCollectionPesajesalidaToAttach.getClass(), pesajesalidaCollectionPesajesalidaToAttach.getIdpesajesalida());
                attachedPesajesalidaCollection.add(pesajesalidaCollectionPesajesalidaToAttach);
            }
            operario.setPesajesalidaCollection(attachedPesajesalidaCollection);
            Collection<Ciu> attachedCiuCollection = new ArrayList<Ciu>();
            for (Ciu ciuCollectionCiuToAttach : operario.getCiuCollection()) {
                ciuCollectionCiuToAttach = em.getReference(ciuCollectionCiuToAttach.getClass(), ciuCollectionCiuToAttach.getIdCIU());
                attachedCiuCollection.add(ciuCollectionCiuToAttach);
            }
            operario.setCiuCollection(attachedCiuCollection);
            Collection<Cargaempaque> attachedCargaempaqueCollection = new ArrayList<Cargaempaque>();
            for (Cargaempaque cargaempaqueCollectionCargaempaqueToAttach : operario.getCargaempaqueCollection()) {
                cargaempaqueCollectionCargaempaqueToAttach = em.getReference(cargaempaqueCollectionCargaempaqueToAttach.getClass(), cargaempaqueCollectionCargaempaqueToAttach.getIdCargaEmpaque());
                attachedCargaempaqueCollection.add(cargaempaqueCollectionCargaempaqueToAttach);
            }
            operario.setCargaempaqueCollection(attachedCargaempaqueCollection);
            Collection<Recepcion> attachedRecepcionCollection = new ArrayList<Recepcion>();
            for (Recepcion recepcionCollectionRecepcionToAttach : operario.getRecepcionCollection()) {
                recepcionCollectionRecepcionToAttach = em.getReference(recepcionCollectionRecepcionToAttach.getClass(), recepcionCollectionRecepcionToAttach.getNumeroRecepcion());
                attachedRecepcionCollection.add(recepcionCollectionRecepcionToAttach);
            }
            operario.setRecepcionCollection(attachedRecepcionCollection);
            Collection<Condicion> attachedCondicionCollection = new ArrayList<Condicion>();
            for (Condicion condicionCollectionCondicionToAttach : operario.getCondicionCollection()) {
                condicionCollectionCondicionToAttach = em.getReference(condicionCollectionCondicionToAttach.getClass(), condicionCollectionCondicionToAttach.getIdCondicion());
                attachedCondicionCollection.add(condicionCollectionCondicionToAttach);
            }
            operario.setCondicionCollection(attachedCondicionCollection);
            Collection<Lagar> attachedLagarCollection = new ArrayList<Lagar>();
            for (Lagar lagarCollectionLagarToAttach : operario.getLagarCollection()) {
                lagarCollectionLagarToAttach = em.getReference(lagarCollectionLagarToAttach.getClass(), lagarCollectionLagarToAttach.getIdLagar());
                attachedLagarCollection.add(lagarCollectionLagarToAttach);
            }
            operario.setLagarCollection(attachedLagarCollection);
            Collection<Operariorol> attachedOperariorolCollection = new ArrayList<Operariorol>();
            for (Operariorol operariorolCollectionOperariorolToAttach : operario.getOperariorolCollection()) {
                operariorolCollectionOperariorolToAttach = em.getReference(operariorolCollectionOperariorolToAttach.getClass(), operariorolCollectionOperariorolToAttach.getIdoperariorol());
                attachedOperariorolCollection.add(operariorolCollectionOperariorolToAttach);
            }
            operario.setOperariorolCollection(attachedOperariorolCollection);
            em.persist(operario);
            if (localidad != null) {
                localidad.getOperarioCollection().add(operario);
                localidad = em.merge(localidad);
            }
            if (provincia != null) {
                provincia.getOperarioCollection().add(operario);
                provincia = em.merge(provincia);
            }
            if (pais != null) {
                pais.getOperarioCollection().add(operario);
                pais = em.merge(pais);
            }
            if (estadooperario != null) {
                estadooperario.getOperarioCollection().add(operario);
                estadooperario = em.merge(estadooperario);
            }
            if (tipodocumento != null) {
                tipodocumento.getOperarioCollection().add(operario);
                tipodocumento = em.merge(tipodocumento);
            }
            for (Pesajeentrada pesajeentradaCollectionPesajeentrada : operario.getPesajeentradaCollection()) {
                Operario oldOperarioOfPesajeentradaCollectionPesajeentrada = pesajeentradaCollectionPesajeentrada.getOperario();
                pesajeentradaCollectionPesajeentrada.setOperario(operario);
                pesajeentradaCollectionPesajeentrada = em.merge(pesajeentradaCollectionPesajeentrada);
                if (oldOperarioOfPesajeentradaCollectionPesajeentrada != null) {
                    oldOperarioOfPesajeentradaCollectionPesajeentrada.getPesajeentradaCollection().remove(pesajeentradaCollectionPesajeentrada);
                    oldOperarioOfPesajeentradaCollectionPesajeentrada = em.merge(oldOperarioOfPesajeentradaCollectionPesajeentrada);
                }
            }
            for (Contrato contratoCollectionContrato : operario.getContratoCollection()) {
                Operario oldOperarioOfContratoCollectionContrato = contratoCollectionContrato.getOperario();
                contratoCollectionContrato.setOperario(operario);
                contratoCollectionContrato = em.merge(contratoCollectionContrato);
                if (oldOperarioOfContratoCollectionContrato != null) {
                    oldOperarioOfContratoCollectionContrato.getContratoCollection().remove(contratoCollectionContrato);
                    oldOperarioOfContratoCollectionContrato = em.merge(oldOperarioOfContratoCollectionContrato);
                }
            }
            for (Pesajesalida pesajesalidaCollectionPesajesalida : operario.getPesajesalidaCollection()) {
                Operario oldOperarioOfPesajesalidaCollectionPesajesalida = pesajesalidaCollectionPesajesalida.getOperario();
                pesajesalidaCollectionPesajesalida.setOperario(operario);
                pesajesalidaCollectionPesajesalida = em.merge(pesajesalidaCollectionPesajesalida);
                if (oldOperarioOfPesajesalidaCollectionPesajesalida != null) {
                    oldOperarioOfPesajesalidaCollectionPesajesalida.getPesajesalidaCollection().remove(pesajesalidaCollectionPesajesalida);
                    oldOperarioOfPesajesalidaCollectionPesajesalida = em.merge(oldOperarioOfPesajesalidaCollectionPesajesalida);
                }
            }
            for (Ciu ciuCollectionCiu : operario.getCiuCollection()) {
                Operario oldOperarioOfCiuCollectionCiu = ciuCollectionCiu.getOperario();
                ciuCollectionCiu.setOperario(operario);
                ciuCollectionCiu = em.merge(ciuCollectionCiu);
                if (oldOperarioOfCiuCollectionCiu != null) {
                    oldOperarioOfCiuCollectionCiu.getCiuCollection().remove(ciuCollectionCiu);
                    oldOperarioOfCiuCollectionCiu = em.merge(oldOperarioOfCiuCollectionCiu);
                }
            }
            for (Cargaempaque cargaempaqueCollectionCargaempaque : operario.getCargaempaqueCollection()) {
                Operario oldOperarioOfCargaempaqueCollectionCargaempaque = cargaempaqueCollectionCargaempaque.getOperario();
                cargaempaqueCollectionCargaempaque.setOperario(operario);
                cargaempaqueCollectionCargaempaque = em.merge(cargaempaqueCollectionCargaempaque);
                if (oldOperarioOfCargaempaqueCollectionCargaempaque != null) {
                    oldOperarioOfCargaempaqueCollectionCargaempaque.getCargaempaqueCollection().remove(cargaempaqueCollectionCargaempaque);
                    oldOperarioOfCargaempaqueCollectionCargaempaque = em.merge(oldOperarioOfCargaempaqueCollectionCargaempaque);
                }
            }
            for (Recepcion recepcionCollectionRecepcion : operario.getRecepcionCollection()) {
                Operario oldOperarioOfRecepcionCollectionRecepcion = recepcionCollectionRecepcion.getOperario();
                recepcionCollectionRecepcion.setOperario(operario);
                recepcionCollectionRecepcion = em.merge(recepcionCollectionRecepcion);
                if (oldOperarioOfRecepcionCollectionRecepcion != null) {
                    oldOperarioOfRecepcionCollectionRecepcion.getRecepcionCollection().remove(recepcionCollectionRecepcion);
                    oldOperarioOfRecepcionCollectionRecepcion = em.merge(oldOperarioOfRecepcionCollectionRecepcion);
                }
            }
            for (Condicion condicionCollectionCondicion : operario.getCondicionCollection()) {
                Operario oldOperarioOfCondicionCollectionCondicion = condicionCollectionCondicion.getOperario();
                condicionCollectionCondicion.setOperario(operario);
                condicionCollectionCondicion = em.merge(condicionCollectionCondicion);
                if (oldOperarioOfCondicionCollectionCondicion != null) {
                    oldOperarioOfCondicionCollectionCondicion.getCondicionCollection().remove(condicionCollectionCondicion);
                    oldOperarioOfCondicionCollectionCondicion = em.merge(oldOperarioOfCondicionCollectionCondicion);
                }
            }
            for (Lagar lagarCollectionLagar : operario.getLagarCollection()) {
                Operario oldOperarioOfLagarCollectionLagar = lagarCollectionLagar.getOperario();
                lagarCollectionLagar.setOperario(operario);
                lagarCollectionLagar = em.merge(lagarCollectionLagar);
                if (oldOperarioOfLagarCollectionLagar != null) {
                    oldOperarioOfLagarCollectionLagar.getLagarCollection().remove(lagarCollectionLagar);
                    oldOperarioOfLagarCollectionLagar = em.merge(oldOperarioOfLagarCollectionLagar);
                }
            }
            for (Operariorol operariorolCollectionOperariorol : operario.getOperariorolCollection()) {
                Operario oldOperarioOfOperariorolCollectionOperariorol = operariorolCollectionOperariorol.getOperario();
                operariorolCollectionOperariorol.setOperario(operario);
                operariorolCollectionOperariorol = em.merge(operariorolCollectionOperariorol);
                if (oldOperarioOfOperariorolCollectionOperariorol != null) {
                    oldOperarioOfOperariorolCollectionOperariorol.getOperariorolCollection().remove(operariorolCollectionOperariorol);
                    oldOperarioOfOperariorolCollectionOperariorol = em.merge(oldOperarioOfOperariorolCollectionOperariorol);
                }
            }
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void edit(Operario operario) throws IllegalOrphanException, NonexistentEntityException, Exception {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Operario persistentOperario = em.find(Operario.class, operario.getIdoperario());
            Localidad localidadOld = persistentOperario.getLocalidad();
            Localidad localidadNew = operario.getLocalidad();
            Provincia provinciaOld = persistentOperario.getProvincia();
            Provincia provinciaNew = operario.getProvincia();
            Pais paisOld = persistentOperario.getPais();
            Pais paisNew = operario.getPais();
            Estadooperario estadooperarioOld = persistentOperario.getEstadooperario();
            Estadooperario estadooperarioNew = operario.getEstadooperario();
            Tipodocumento tipodocumentoOld = persistentOperario.getTipodocumento();
            Tipodocumento tipodocumentoNew = operario.getTipodocumento();
            Collection<Pesajeentrada> pesajeentradaCollectionOld = persistentOperario.getPesajeentradaCollection();
            Collection<Pesajeentrada> pesajeentradaCollectionNew = operario.getPesajeentradaCollection();
            Collection<Contrato> contratoCollectionOld = persistentOperario.getContratoCollection();
            Collection<Contrato> contratoCollectionNew = operario.getContratoCollection();
            Collection<Pesajesalida> pesajesalidaCollectionOld = persistentOperario.getPesajesalidaCollection();
            Collection<Pesajesalida> pesajesalidaCollectionNew = operario.getPesajesalidaCollection();
            Collection<Ciu> ciuCollectionOld = persistentOperario.getCiuCollection();
            Collection<Ciu> ciuCollectionNew = operario.getCiuCollection();
            Collection<Cargaempaque> cargaempaqueCollectionOld = persistentOperario.getCargaempaqueCollection();
            Collection<Cargaempaque> cargaempaqueCollectionNew = operario.getCargaempaqueCollection();
            Collection<Recepcion> recepcionCollectionOld = persistentOperario.getRecepcionCollection();
            Collection<Recepcion> recepcionCollectionNew = operario.getRecepcionCollection();
            Collection<Condicion> condicionCollectionOld = persistentOperario.getCondicionCollection();
            Collection<Condicion> condicionCollectionNew = operario.getCondicionCollection();
            Collection<Lagar> lagarCollectionOld = persistentOperario.getLagarCollection();
            Collection<Lagar> lagarCollectionNew = operario.getLagarCollection();
            Collection<Operariorol> operariorolCollectionOld = persistentOperario.getOperariorolCollection();
            Collection<Operariorol> operariorolCollectionNew = operario.getOperariorolCollection();
            List<String> illegalOrphanMessages = null;
            for (Contrato contratoCollectionOldContrato : contratoCollectionOld) {
                if (!contratoCollectionNew.contains(contratoCollectionOldContrato)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain Contrato " + contratoCollectionOldContrato + " since its operario field is not nullable.");
                }
            }
            for (Ciu ciuCollectionOldCiu : ciuCollectionOld) {
                if (!ciuCollectionNew.contains(ciuCollectionOldCiu)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain Ciu " + ciuCollectionOldCiu + " since its operario field is not nullable.");
                }
            }
            for (Condicion condicionCollectionOldCondicion : condicionCollectionOld) {
                if (!condicionCollectionNew.contains(condicionCollectionOldCondicion)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain Condicion " + condicionCollectionOldCondicion + " since its operario field is not nullable.");
                }
            }
            for (Lagar lagarCollectionOldLagar : lagarCollectionOld) {
                if (!lagarCollectionNew.contains(lagarCollectionOldLagar)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain Lagar " + lagarCollectionOldLagar + " since its operario field is not nullable.");
                }
            }
            for (Operariorol operariorolCollectionOldOperariorol : operariorolCollectionOld) {
                if (!operariorolCollectionNew.contains(operariorolCollectionOldOperariorol)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain Operariorol " + operariorolCollectionOldOperariorol + " since its operario field is not nullable.");
                }
            }
            if (illegalOrphanMessages != null) {
                throw new IllegalOrphanException(illegalOrphanMessages);
            }
            if (localidadNew != null) {
                localidadNew = em.getReference(localidadNew.getClass(), localidadNew.getIdlocalidad());
                operario.setLocalidad(localidadNew);
            }
            if (provinciaNew != null) {
                provinciaNew = em.getReference(provinciaNew.getClass(), provinciaNew.getIdprovincia());
                operario.setProvincia(provinciaNew);
            }
            if (paisNew != null) {
                paisNew = em.getReference(paisNew.getClass(), paisNew.getIdpais());
                operario.setPais(paisNew);
            }
            if (estadooperarioNew != null) {
                estadooperarioNew = em.getReference(estadooperarioNew.getClass(), estadooperarioNew.getIdestadooperario());
                operario.setEstadooperario(estadooperarioNew);
            }
            if (tipodocumentoNew != null) {
                tipodocumentoNew = em.getReference(tipodocumentoNew.getClass(), tipodocumentoNew.getIdtipodocumento());
                operario.setTipodocumento(tipodocumentoNew);
            }
            Collection<Pesajeentrada> attachedPesajeentradaCollectionNew = new ArrayList<Pesajeentrada>();
            for (Pesajeentrada pesajeentradaCollectionNewPesajeentradaToAttach : pesajeentradaCollectionNew) {
                pesajeentradaCollectionNewPesajeentradaToAttach = em.getReference(pesajeentradaCollectionNewPesajeentradaToAttach.getClass(), pesajeentradaCollectionNewPesajeentradaToAttach.getIdpesajeentrada());
                attachedPesajeentradaCollectionNew.add(pesajeentradaCollectionNewPesajeentradaToAttach);
            }
            pesajeentradaCollectionNew = attachedPesajeentradaCollectionNew;
            operario.setPesajeentradaCollection(pesajeentradaCollectionNew);
            Collection<Contrato> attachedContratoCollectionNew = new ArrayList<Contrato>();
            for (Contrato contratoCollectionNewContratoToAttach : contratoCollectionNew) {
                contratoCollectionNewContratoToAttach = em.getReference(contratoCollectionNewContratoToAttach.getClass(), contratoCollectionNewContratoToAttach.getNumeroContrato());
                attachedContratoCollectionNew.add(contratoCollectionNewContratoToAttach);
            }
            contratoCollectionNew = attachedContratoCollectionNew;
            operario.setContratoCollection(contratoCollectionNew);
            Collection<Pesajesalida> attachedPesajesalidaCollectionNew = new ArrayList<Pesajesalida>();
            for (Pesajesalida pesajesalidaCollectionNewPesajesalidaToAttach : pesajesalidaCollectionNew) {
                pesajesalidaCollectionNewPesajesalidaToAttach = em.getReference(pesajesalidaCollectionNewPesajesalidaToAttach.getClass(), pesajesalidaCollectionNewPesajesalidaToAttach.getIdpesajesalida());
                attachedPesajesalidaCollectionNew.add(pesajesalidaCollectionNewPesajesalidaToAttach);
            }
            pesajesalidaCollectionNew = attachedPesajesalidaCollectionNew;
            operario.setPesajesalidaCollection(pesajesalidaCollectionNew);
            Collection<Ciu> attachedCiuCollectionNew = new ArrayList<Ciu>();
            for (Ciu ciuCollectionNewCiuToAttach : ciuCollectionNew) {
                ciuCollectionNewCiuToAttach = em.getReference(ciuCollectionNewCiuToAttach.getClass(), ciuCollectionNewCiuToAttach.getIdCIU());
                attachedCiuCollectionNew.add(ciuCollectionNewCiuToAttach);
            }
            ciuCollectionNew = attachedCiuCollectionNew;
            operario.setCiuCollection(ciuCollectionNew);
            Collection<Cargaempaque> attachedCargaempaqueCollectionNew = new ArrayList<Cargaempaque>();
            for (Cargaempaque cargaempaqueCollectionNewCargaempaqueToAttach : cargaempaqueCollectionNew) {
                cargaempaqueCollectionNewCargaempaqueToAttach = em.getReference(cargaempaqueCollectionNewCargaempaqueToAttach.getClass(), cargaempaqueCollectionNewCargaempaqueToAttach.getIdCargaEmpaque());
                attachedCargaempaqueCollectionNew.add(cargaempaqueCollectionNewCargaempaqueToAttach);
            }
            cargaempaqueCollectionNew = attachedCargaempaqueCollectionNew;
            operario.setCargaempaqueCollection(cargaempaqueCollectionNew);
            Collection<Recepcion> attachedRecepcionCollectionNew = new ArrayList<Recepcion>();
            for (Recepcion recepcionCollectionNewRecepcionToAttach : recepcionCollectionNew) {
                recepcionCollectionNewRecepcionToAttach = em.getReference(recepcionCollectionNewRecepcionToAttach.getClass(), recepcionCollectionNewRecepcionToAttach.getNumeroRecepcion());
                attachedRecepcionCollectionNew.add(recepcionCollectionNewRecepcionToAttach);
            }
            recepcionCollectionNew = attachedRecepcionCollectionNew;
            operario.setRecepcionCollection(recepcionCollectionNew);
            Collection<Condicion> attachedCondicionCollectionNew = new ArrayList<Condicion>();
            for (Condicion condicionCollectionNewCondicionToAttach : condicionCollectionNew) {
                condicionCollectionNewCondicionToAttach = em.getReference(condicionCollectionNewCondicionToAttach.getClass(), condicionCollectionNewCondicionToAttach.getIdCondicion());
                attachedCondicionCollectionNew.add(condicionCollectionNewCondicionToAttach);
            }
            condicionCollectionNew = attachedCondicionCollectionNew;
            operario.setCondicionCollection(condicionCollectionNew);
            Collection<Lagar> attachedLagarCollectionNew = new ArrayList<Lagar>();
            for (Lagar lagarCollectionNewLagarToAttach : lagarCollectionNew) {
                lagarCollectionNewLagarToAttach = em.getReference(lagarCollectionNewLagarToAttach.getClass(), lagarCollectionNewLagarToAttach.getIdLagar());
                attachedLagarCollectionNew.add(lagarCollectionNewLagarToAttach);
            }
            lagarCollectionNew = attachedLagarCollectionNew;
            operario.setLagarCollection(lagarCollectionNew);
            Collection<Operariorol> attachedOperariorolCollectionNew = new ArrayList<Operariorol>();
            for (Operariorol operariorolCollectionNewOperariorolToAttach : operariorolCollectionNew) {
                operariorolCollectionNewOperariorolToAttach = em.getReference(operariorolCollectionNewOperariorolToAttach.getClass(), operariorolCollectionNewOperariorolToAttach.getIdoperariorol());
                attachedOperariorolCollectionNew.add(operariorolCollectionNewOperariorolToAttach);
            }
            operariorolCollectionNew = attachedOperariorolCollectionNew;
            operario.setOperariorolCollection(operariorolCollectionNew);
            operario = em.merge(operario);
            if (localidadOld != null && !localidadOld.equals(localidadNew)) {
                localidadOld.getOperarioCollection().remove(operario);
                localidadOld = em.merge(localidadOld);
            }
            if (localidadNew != null && !localidadNew.equals(localidadOld)) {
                localidadNew.getOperarioCollection().add(operario);
                localidadNew = em.merge(localidadNew);
            }
            if (provinciaOld != null && !provinciaOld.equals(provinciaNew)) {
                provinciaOld.getOperarioCollection().remove(operario);
                provinciaOld = em.merge(provinciaOld);
            }
            if (provinciaNew != null && !provinciaNew.equals(provinciaOld)) {
                provinciaNew.getOperarioCollection().add(operario);
                provinciaNew = em.merge(provinciaNew);
            }
            if (paisOld != null && !paisOld.equals(paisNew)) {
                paisOld.getOperarioCollection().remove(operario);
                paisOld = em.merge(paisOld);
            }
            if (paisNew != null && !paisNew.equals(paisOld)) {
                paisNew.getOperarioCollection().add(operario);
                paisNew = em.merge(paisNew);
            }
            if (estadooperarioOld != null && !estadooperarioOld.equals(estadooperarioNew)) {
                estadooperarioOld.getOperarioCollection().remove(operario);
                estadooperarioOld = em.merge(estadooperarioOld);
            }
            if (estadooperarioNew != null && !estadooperarioNew.equals(estadooperarioOld)) {
                estadooperarioNew.getOperarioCollection().add(operario);
                estadooperarioNew = em.merge(estadooperarioNew);
            }
            if (tipodocumentoOld != null && !tipodocumentoOld.equals(tipodocumentoNew)) {
                tipodocumentoOld.getOperarioCollection().remove(operario);
                tipodocumentoOld = em.merge(tipodocumentoOld);
            }
            if (tipodocumentoNew != null && !tipodocumentoNew.equals(tipodocumentoOld)) {
                tipodocumentoNew.getOperarioCollection().add(operario);
                tipodocumentoNew = em.merge(tipodocumentoNew);
            }
            for (Pesajeentrada pesajeentradaCollectionOldPesajeentrada : pesajeentradaCollectionOld) {
                if (!pesajeentradaCollectionNew.contains(pesajeentradaCollectionOldPesajeentrada)) {
                    pesajeentradaCollectionOldPesajeentrada.setOperario(null);
                    pesajeentradaCollectionOldPesajeentrada = em.merge(pesajeentradaCollectionOldPesajeentrada);
                }
            }
            for (Pesajeentrada pesajeentradaCollectionNewPesajeentrada : pesajeentradaCollectionNew) {
                if (!pesajeentradaCollectionOld.contains(pesajeentradaCollectionNewPesajeentrada)) {
                    Operario oldOperarioOfPesajeentradaCollectionNewPesajeentrada = pesajeentradaCollectionNewPesajeentrada.getOperario();
                    pesajeentradaCollectionNewPesajeentrada.setOperario(operario);
                    pesajeentradaCollectionNewPesajeentrada = em.merge(pesajeentradaCollectionNewPesajeentrada);
                    if (oldOperarioOfPesajeentradaCollectionNewPesajeentrada != null && !oldOperarioOfPesajeentradaCollectionNewPesajeentrada.equals(operario)) {
                        oldOperarioOfPesajeentradaCollectionNewPesajeentrada.getPesajeentradaCollection().remove(pesajeentradaCollectionNewPesajeentrada);
                        oldOperarioOfPesajeentradaCollectionNewPesajeentrada = em.merge(oldOperarioOfPesajeentradaCollectionNewPesajeentrada);
                    }
                }
            }
            for (Contrato contratoCollectionNewContrato : contratoCollectionNew) {
                if (!contratoCollectionOld.contains(contratoCollectionNewContrato)) {
                    Operario oldOperarioOfContratoCollectionNewContrato = contratoCollectionNewContrato.getOperario();
                    contratoCollectionNewContrato.setOperario(operario);
                    contratoCollectionNewContrato = em.merge(contratoCollectionNewContrato);
                    if (oldOperarioOfContratoCollectionNewContrato != null && !oldOperarioOfContratoCollectionNewContrato.equals(operario)) {
                        oldOperarioOfContratoCollectionNewContrato.getContratoCollection().remove(contratoCollectionNewContrato);
                        oldOperarioOfContratoCollectionNewContrato = em.merge(oldOperarioOfContratoCollectionNewContrato);
                    }
                }
            }
            for (Pesajesalida pesajesalidaCollectionOldPesajesalida : pesajesalidaCollectionOld) {
                if (!pesajesalidaCollectionNew.contains(pesajesalidaCollectionOldPesajesalida)) {
                    pesajesalidaCollectionOldPesajesalida.setOperario(null);
                    pesajesalidaCollectionOldPesajesalida = em.merge(pesajesalidaCollectionOldPesajesalida);
                }
            }
            for (Pesajesalida pesajesalidaCollectionNewPesajesalida : pesajesalidaCollectionNew) {
                if (!pesajesalidaCollectionOld.contains(pesajesalidaCollectionNewPesajesalida)) {
                    Operario oldOperarioOfPesajesalidaCollectionNewPesajesalida = pesajesalidaCollectionNewPesajesalida.getOperario();
                    pesajesalidaCollectionNewPesajesalida.setOperario(operario);
                    pesajesalidaCollectionNewPesajesalida = em.merge(pesajesalidaCollectionNewPesajesalida);
                    if (oldOperarioOfPesajesalidaCollectionNewPesajesalida != null && !oldOperarioOfPesajesalidaCollectionNewPesajesalida.equals(operario)) {
                        oldOperarioOfPesajesalidaCollectionNewPesajesalida.getPesajesalidaCollection().remove(pesajesalidaCollectionNewPesajesalida);
                        oldOperarioOfPesajesalidaCollectionNewPesajesalida = em.merge(oldOperarioOfPesajesalidaCollectionNewPesajesalida);
                    }
                }
            }
            for (Ciu ciuCollectionNewCiu : ciuCollectionNew) {
                if (!ciuCollectionOld.contains(ciuCollectionNewCiu)) {
                    Operario oldOperarioOfCiuCollectionNewCiu = ciuCollectionNewCiu.getOperario();
                    ciuCollectionNewCiu.setOperario(operario);
                    ciuCollectionNewCiu = em.merge(ciuCollectionNewCiu);
                    if (oldOperarioOfCiuCollectionNewCiu != null && !oldOperarioOfCiuCollectionNewCiu.equals(operario)) {
                        oldOperarioOfCiuCollectionNewCiu.getCiuCollection().remove(ciuCollectionNewCiu);
                        oldOperarioOfCiuCollectionNewCiu = em.merge(oldOperarioOfCiuCollectionNewCiu);
                    }
                }
            }
            for (Cargaempaque cargaempaqueCollectionOldCargaempaque : cargaempaqueCollectionOld) {
                if (!cargaempaqueCollectionNew.contains(cargaempaqueCollectionOldCargaempaque)) {
                    cargaempaqueCollectionOldCargaempaque.setOperario(null);
                    cargaempaqueCollectionOldCargaempaque = em.merge(cargaempaqueCollectionOldCargaempaque);
                }
            }
            for (Cargaempaque cargaempaqueCollectionNewCargaempaque : cargaempaqueCollectionNew) {
                if (!cargaempaqueCollectionOld.contains(cargaempaqueCollectionNewCargaempaque)) {
                    Operario oldOperarioOfCargaempaqueCollectionNewCargaempaque = cargaempaqueCollectionNewCargaempaque.getOperario();
                    cargaempaqueCollectionNewCargaempaque.setOperario(operario);
                    cargaempaqueCollectionNewCargaempaque = em.merge(cargaempaqueCollectionNewCargaempaque);
                    if (oldOperarioOfCargaempaqueCollectionNewCargaempaque != null && !oldOperarioOfCargaempaqueCollectionNewCargaempaque.equals(operario)) {
                        oldOperarioOfCargaempaqueCollectionNewCargaempaque.getCargaempaqueCollection().remove(cargaempaqueCollectionNewCargaempaque);
                        oldOperarioOfCargaempaqueCollectionNewCargaempaque = em.merge(oldOperarioOfCargaempaqueCollectionNewCargaempaque);
                    }
                }
            }
            for (Recepcion recepcionCollectionOldRecepcion : recepcionCollectionOld) {
                if (!recepcionCollectionNew.contains(recepcionCollectionOldRecepcion)) {
                    recepcionCollectionOldRecepcion.setOperario(null);
                    recepcionCollectionOldRecepcion = em.merge(recepcionCollectionOldRecepcion);
                }
            }
            for (Recepcion recepcionCollectionNewRecepcion : recepcionCollectionNew) {
                if (!recepcionCollectionOld.contains(recepcionCollectionNewRecepcion)) {
                    Operario oldOperarioOfRecepcionCollectionNewRecepcion = recepcionCollectionNewRecepcion.getOperario();
                    recepcionCollectionNewRecepcion.setOperario(operario);
                    recepcionCollectionNewRecepcion = em.merge(recepcionCollectionNewRecepcion);
                    if (oldOperarioOfRecepcionCollectionNewRecepcion != null && !oldOperarioOfRecepcionCollectionNewRecepcion.equals(operario)) {
                        oldOperarioOfRecepcionCollectionNewRecepcion.getRecepcionCollection().remove(recepcionCollectionNewRecepcion);
                        oldOperarioOfRecepcionCollectionNewRecepcion = em.merge(oldOperarioOfRecepcionCollectionNewRecepcion);
                    }
                }
            }
            for (Condicion condicionCollectionNewCondicion : condicionCollectionNew) {
                if (!condicionCollectionOld.contains(condicionCollectionNewCondicion)) {
                    Operario oldOperarioOfCondicionCollectionNewCondicion = condicionCollectionNewCondicion.getOperario();
                    condicionCollectionNewCondicion.setOperario(operario);
                    condicionCollectionNewCondicion = em.merge(condicionCollectionNewCondicion);
                    if (oldOperarioOfCondicionCollectionNewCondicion != null && !oldOperarioOfCondicionCollectionNewCondicion.equals(operario)) {
                        oldOperarioOfCondicionCollectionNewCondicion.getCondicionCollection().remove(condicionCollectionNewCondicion);
                        oldOperarioOfCondicionCollectionNewCondicion = em.merge(oldOperarioOfCondicionCollectionNewCondicion);
                    }
                }
            }
            for (Lagar lagarCollectionNewLagar : lagarCollectionNew) {
                if (!lagarCollectionOld.contains(lagarCollectionNewLagar)) {
                    Operario oldOperarioOfLagarCollectionNewLagar = lagarCollectionNewLagar.getOperario();
                    lagarCollectionNewLagar.setOperario(operario);
                    lagarCollectionNewLagar = em.merge(lagarCollectionNewLagar);
                    if (oldOperarioOfLagarCollectionNewLagar != null && !oldOperarioOfLagarCollectionNewLagar.equals(operario)) {
                        oldOperarioOfLagarCollectionNewLagar.getLagarCollection().remove(lagarCollectionNewLagar);
                        oldOperarioOfLagarCollectionNewLagar = em.merge(oldOperarioOfLagarCollectionNewLagar);
                    }
                }
            }
            for (Operariorol operariorolCollectionNewOperariorol : operariorolCollectionNew) {
                if (!operariorolCollectionOld.contains(operariorolCollectionNewOperariorol)) {
                    Operario oldOperarioOfOperariorolCollectionNewOperariorol = operariorolCollectionNewOperariorol.getOperario();
                    operariorolCollectionNewOperariorol.setOperario(operario);
                    operariorolCollectionNewOperariorol = em.merge(operariorolCollectionNewOperariorol);
                    if (oldOperarioOfOperariorolCollectionNewOperariorol != null && !oldOperarioOfOperariorolCollectionNewOperariorol.equals(operario)) {
                        oldOperarioOfOperariorolCollectionNewOperariorol.getOperariorolCollection().remove(operariorolCollectionNewOperariorol);
                        oldOperarioOfOperariorolCollectionNewOperariorol = em.merge(oldOperarioOfOperariorolCollectionNewOperariorol);
                    }
                }
            }
            em.getTransaction().commit();
        } catch (Exception ex) {
            String msg = ex.getLocalizedMessage();
            if (msg == null || msg.length() == 0) {
                Integer id = operario.getIdoperario();
                if (findOperario(id) == null) {
                    throw new NonexistentEntityException("The operario with id " + id + " no longer exists.");
                }
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void destroy(Integer id) throws IllegalOrphanException, NonexistentEntityException {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Operario operario;
            try {
                operario = em.getReference(Operario.class, id);
                operario.getIdoperario();
            } catch (EntityNotFoundException enfe) {
                throw new NonexistentEntityException("The operario with id " + id + " no longer exists.", enfe);
            }
            List<String> illegalOrphanMessages = null;
            Collection<Contrato> contratoCollectionOrphanCheck = operario.getContratoCollection();
            for (Contrato contratoCollectionOrphanCheckContrato : contratoCollectionOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This Operario (" + operario + ") cannot be destroyed since the Contrato " + contratoCollectionOrphanCheckContrato + " in its contratoCollection field has a non-nullable operario field.");
            }
            Collection<Ciu> ciuCollectionOrphanCheck = operario.getCiuCollection();
            for (Ciu ciuCollectionOrphanCheckCiu : ciuCollectionOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This Operario (" + operario + ") cannot be destroyed since the Ciu " + ciuCollectionOrphanCheckCiu + " in its ciuCollection field has a non-nullable operario field.");
            }
            Collection<Condicion> condicionCollectionOrphanCheck = operario.getCondicionCollection();
            for (Condicion condicionCollectionOrphanCheckCondicion : condicionCollectionOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This Operario (" + operario + ") cannot be destroyed since the Condicion " + condicionCollectionOrphanCheckCondicion + " in its condicionCollection field has a non-nullable operario field.");
            }
            Collection<Lagar> lagarCollectionOrphanCheck = operario.getLagarCollection();
            for (Lagar lagarCollectionOrphanCheckLagar : lagarCollectionOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This Operario (" + operario + ") cannot be destroyed since the Lagar " + lagarCollectionOrphanCheckLagar + " in its lagarCollection field has a non-nullable operario field.");
            }
            Collection<Operariorol> operariorolCollectionOrphanCheck = operario.getOperariorolCollection();
            for (Operariorol operariorolCollectionOrphanCheckOperariorol : operariorolCollectionOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This Operario (" + operario + ") cannot be destroyed since the Operariorol " + operariorolCollectionOrphanCheckOperariorol + " in its operariorolCollection field has a non-nullable operario field.");
            }
            if (illegalOrphanMessages != null) {
                throw new IllegalOrphanException(illegalOrphanMessages);
            }
            Localidad localidad = operario.getLocalidad();
            if (localidad != null) {
                localidad.getOperarioCollection().remove(operario);
                localidad = em.merge(localidad);
            }
            Provincia provincia = operario.getProvincia();
            if (provincia != null) {
                provincia.getOperarioCollection().remove(operario);
                provincia = em.merge(provincia);
            }
            Pais pais = operario.getPais();
            if (pais != null) {
                pais.getOperarioCollection().remove(operario);
                pais = em.merge(pais);
            }
            Estadooperario estadooperario = operario.getEstadooperario();
            if (estadooperario != null) {
                estadooperario.getOperarioCollection().remove(operario);
                estadooperario = em.merge(estadooperario);
            }
            Tipodocumento tipodocumento = operario.getTipodocumento();
            if (tipodocumento != null) {
                tipodocumento.getOperarioCollection().remove(operario);
                tipodocumento = em.merge(tipodocumento);
            }
            Collection<Pesajeentrada> pesajeentradaCollection = operario.getPesajeentradaCollection();
            for (Pesajeentrada pesajeentradaCollectionPesajeentrada : pesajeentradaCollection) {
                pesajeentradaCollectionPesajeentrada.setOperario(null);
                pesajeentradaCollectionPesajeentrada = em.merge(pesajeentradaCollectionPesajeentrada);
            }
            Collection<Pesajesalida> pesajesalidaCollection = operario.getPesajesalidaCollection();
            for (Pesajesalida pesajesalidaCollectionPesajesalida : pesajesalidaCollection) {
                pesajesalidaCollectionPesajesalida.setOperario(null);
                pesajesalidaCollectionPesajesalida = em.merge(pesajesalidaCollectionPesajesalida);
            }
            Collection<Cargaempaque> cargaempaqueCollection = operario.getCargaempaqueCollection();
            for (Cargaempaque cargaempaqueCollectionCargaempaque : cargaempaqueCollection) {
                cargaempaqueCollectionCargaempaque.setOperario(null);
                cargaempaqueCollectionCargaempaque = em.merge(cargaempaqueCollectionCargaempaque);
            }
            Collection<Recepcion> recepcionCollection = operario.getRecepcionCollection();
            for (Recepcion recepcionCollectionRecepcion : recepcionCollection) {
                recepcionCollectionRecepcion.setOperario(null);
                recepcionCollectionRecepcion = em.merge(recepcionCollectionRecepcion);
            }
            em.remove(operario);
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public List<Operario> findOperarioEntities() {
        return findOperarioEntities(true, -1, -1);
    }

    public List<Operario> findOperarioEntities(int maxResults, int firstResult) {
        return findOperarioEntities(false, maxResults, firstResult);
    }

    private List<Operario> findOperarioEntities(boolean all, int maxResults, int firstResult) {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select object(o) from Operario as o");
            if (!all) {
                q.setMaxResults(maxResults);
                q.setFirstResult(firstResult);
            }
            return q.getResultList();
        } finally {
            em.close();
        }
    }

    public Operario findOperario(Integer id) {
        EntityManager em = getEntityManager();
        try {
            return em.find(Operario.class, id);
        } finally {
            em.close();
        }
    }

    public int getOperarioCount() {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select count(o) from Operario as o");
            return ((Long) q.getSingleResult()).intValue();
        } finally {
            em.close();
        }
    }

    public Operario findOperario_x_apellido(String nom) {

        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select u from Operario u where u.apellido = " + "'" + nom + "'");
            return (Operario) q.getSingleResult();
        } finally {
            em.close();
        }
    }

    public Operario findOperario_x_cuil(String cuil) {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select u from Operario u where u.cuil = " + "'" + cuil + "'");
            return (Operario) q.getSingleResult();
        } finally {
            em.close();
        }
    }

    public List<Operario> findOperarioActivo() {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select u from Operario u where u.fechabaja = " + "'" + "" + "'");
            return  q.getResultList();
        } finally {
            em.close();
        }
    }

    public List<Operario> findOperarioBaja() {
         EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select u from Operario u where u.fechabaja  <>'' ");
            return  q.getResultList();
        } finally {
            em.close();
        }

    }

    public Operario findOperario_x_dni(String dni) {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select u from Operario u where u.numerodocumento = " + "'" + dni + "'");
            return (Operario) q.getSingleResult();
        } finally {
            em.close();
        }
    }
}
